package com.yunnuo.system.users.dao;

import com.yunnuo.system.users.entity.User;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * Created by w_weihf on 2018/7/20.
 */
@Repository
@Transactional
public interface IUserDao   extends JpaRepository<User, String>, JpaSpecificationExecutor<User> {
    /**
     * 根据用户名查询单独用户实体
     * @param loginName
     * @return
     */
    User findAllByLoginName(String loginName);

    /**
     * 根据用户id查询用户实体
     * @param userId
     * @return
     */
    User findAllById(String userId);

    /**
     * 根据部门ID查询是否有部门内人员
     * @param deptId
     * @return
     */
    int countUsersByDeptId(String deptId);

    /**
     * 根据用户ID修改用户登录密码
     * @param
     * @return
     */
    @Modifying
    @Query("update User set password=?2 where id=?1 ")
    int updatePasswordByUserId(String id,String password);

    /**
     * 查询手机号是否存在
     * @param phone
     * @return
     */
    int countUsersByPhone(String phone);


    /**
     * 查询邮箱是否存在
     * @param email
     * @return
     */
    int countAllByEmail(String email);

    /**
     * 查询用户列表  根据创建时间降序排列
     * @param
     * @return
     */
    @Override
    Page<User> findAll(Pageable pageable);

    @Override
    long count();

    int countAllByIdAndLoginName(String id,String loginName);
    int countAllByLoginName(String loginName);

    int countAllByIdAndPhone(String id, String phone);

    int countAllByIdAndEmail(String id, String email);
}
